Java로 세션 생성하기
✒️ 2025-06-24 10:16 내용 수정
Session
- 서버에 저장하는 사용자별 임시 저장 공간으로, 사용자에 따른 상태를 저장할 때 사용한다.
- session에 대한 상세 내용은 세션(Session) 참고.
- 웹 사이트 접속 시 고유한 Session ID를 생성하여 데이터를 관리한다.
| 세션 | |
|---|---|
| 저장 위치 | 웹 서버 |
| 종료 시점 | 서버에서 지정한 기간 클라이언트와의 상호작용이 없을 때 연결 종료 요청(ex. 로그아웃) 수신 시 |
| 데이터 크기 | 제한 없음 |
| 리소스 | 서버의 리소스 |
| 보안 | 서버에 저장되어 상대적 안정적. 서버 공격 시에는 어쩔 수 없음 |
| 목적 | 상태 유지, 사용자 인증, 개인화 |
Session 객체
- 세션은
javax.servlet.http.HttpSession인터페이스 내장 객체를 사용한다.- JSP의 내장 객체는 JSP 내장 객체 참고.
- 세션의 속성값은 Object 객체 타입만 가능하다.
- 같은 속성 이름의 세션을 설정하면 가장 마지막에 설정한 세션의 속성값이 저장된다.
<%
// 세션에 값 저장
session.setAttribute("userId", "hong123");
// 세션에서 값 꺼내기
String userId = (String) session.getAttribute("userId");
// 세션에서 값 삭제
session.removeAttribute("userId");
// 세션 종료 (로그아웃 등)
session.invalidate();
%>
메서드
| 메서드 | 설명 |
|---|---|
String getId() |
세션에 할당된 고유 Id를 반환 |
Object getAttribute(String name) |
세션 속성 이름이 name인 속성값을 Object형으로 반환. 사용시 반드시 형변환을 해야 함 |
setAttribute(String name, Object value) |
세션 속성 이름이 name인 속성에 value를 할당 |
Enumeration getAttributeNames() |
세션 속성 이름을 Enumeration 객체 타입으로 반환 |
long getCreationTime() |
세션이 생성된 시간을 반환. 1970년 1월 1일 ~ 현재까지 경과된 시간을 1/1000초로 반환 |
boolean isNew() |
해당 세션이 처음 생성되었는지 여부 반환 |
invalidate() |
세션 무효화. 모든 세션 데이터 제거 호출 후 같은 페이지에서 session 객체 사용 시 에러 |
long getLastAccessedTime() |
해당 세션에 클라이언트가 마지막으로 request를 보낸 시간을 반환 |
long getCreationTime() |
세션이 생성된 시간 반환 |
int getMaxInactiveInterval(int interval) |
해당 세션을 유지하기 위한 시간 반환 |
setMaxInactiveInterval(int interval) |
해당 세션을 유지하기 위한 시간을 초 단위로 설정 기본은 1800초 |
removeAttribute(String name) |
세션 속성 이름이 name인 속성 제거 |
예제
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 세션 속성 이름과 값 추가
session.setAttribute("param1", "asdf");
session.setAttribute("param2", "qwer");
session.setAttribute("param3", "zxcv");
// 세션 속성 이름 확인
Enumeration<String> names = session.getAttributeNames();
while(names.hasMoreElements()) {
String key = names.nextElement();
String value = (String)session.getAttribute(key);
out.println(key + " = " + value + "<br>");
}
// 세션 지속시간 반환
session.setMaxInactiveInterval(60*60*2);
int seconds = session.getMaxInactiveInterval();
out.println("세션 지속시간 : " + seconds);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session Test</title>
</head>
<body>
</body>
</html>